练习

1.(*2.5)参照2.4节的Stack模块的风格,写一个string的双向链表模块。通过建立一个程序设计语言名字的表来演习这个模块。为这个表提供一个sort()函数,并提供一个函数去反转表中字符串的顺序。

2.(*2)取若干不太大的程序,它们用到至少一个没有用名字空间定义的库。修改它,使它对有关的库使用一个名字空间。提示:8.2.9节。

3.(*2)利用名字空间将桌面计算器程序修改为2.4节的风格。不要使用全局的使用指令。记录下你在修改中所犯的错误。提出一些方法,以便在将来避免这些错误。

4.(*1)写一个程序,其中一个函数里抛出一个异常,另一个捕捉它。

5.(*2)写一个程序,它由一些互相调用直到第10层的函数组成。给每个函数一个参数,确定是在哪个层次中抛出了异常。让main()捕捉这些异常,并打印出捕捉到的那个异常。请不要忘记这种情况:一个异常也可以在抛出它的函数里被捕捉到。

6.(*2)修改8.5[5]的程序,做一些实测:让一个堆栈类在某个地方抛出异常,看看捕捉异常的代价是否因为抛出位置在函数调用栈中的位置不同而不同。在每个函数中增加一个字符串对象,再重新做实测。

7.(*1)找出8.3.3.1节的第一个main()版本中的错误。

8.(*2)写一个函数,它或者是返回一个值,或者基于某个参数而抛出这个值。实测这两种方式在运行时间上的差异。

9.(*2)利用异常修改8.5[3]的计算器版本。记录下你所犯的错误。提出一些方法,以便在将来避免这些错误。

10.(*2.5)写出能够检查可能的上溢和下溢的plus()、minus()、multiply()、divide()函数,让它们在出现这些错误时抛出异常。

11.(*2)修改计算器,使用8.5[10]定义的那些函数。

🔚